﻿using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.Linq;
using System.Security.Claims;

namespace StudentManagementSystem
{

    // 学校类
    public class School
    {
        public int Id { get; set; } // 学校编号
        public string Name { get; set; } // 学校名称
        public List<Class> Classes { get; set; } // 学校包含的班级列表

        // 构造函数，初始化学校信息和班级列表
        public School(int id, string name)
        {
            Id = id;
            Name = name;
            Classes = new List<Class>();
        }

        // 添加班级到学校
        public void AddClass(Class c)
        {
            Classes.Add(c);
        }

        // 从学校移除班级
        public void RemoveClass(Class c)
        {
            Classes.Remove(c);
        }

        // 根据班级编号查找班级
        public Class FindClassById(int id)
        {
            return Classes.FirstOrDefault(c => c.Id == id);
        }

        // 根据班级名称查找班级
        public Class FindClassByName(string name)
        {
            return Classes.FirstOrDefault(c => c.Name == name);
        }

        // 显示学校信息和所有班级信息
        public void ShowInfo()
        {
            Console.WriteLine($"学校编号：{Id}，学校名称：{Name}");
            Console.WriteLine("该学校包含以下班级：");
            foreach (var c in Classes)
            {
                c.ShowInfo();
            }
        }
    }
    

    // 班级类
    public class Class
    {
        public int Id { get; set; } // 班级编号
        public string Name { get; set; } // 班级名称
        public School School { get; set; } // 班级所属的学校
        public List<Student> Students { get; set; } // 班级包含的学生列表

        // 构造函数，初始化班级信息和学生列表
        public Class(int id, string name, School school)
        {
            Id = id;
            Name = name;
            School = school;
            Students = new List<Student>();
        }

        // 添加学生到班级
        public void AddStudent(Student s)
        {
            Students.Add(s);
            s.Class = this;
        }

        // 从班级移除学生
        public void RemoveStudent(Student s)
        {
            Students.Remove(s);
            s.Class = null;
        }

        // 根据学生编号查找学生
        public Student FindStudentById(int id)
        {
            return Students.FirstOrDefault(s => s.Id == id);
        }

        // 根据学生姓名查找学生
        public Student FindStudentByName(string name)
        {
            return Students.FirstOrDefault(s => s.Name == name);
        }

        // 显示班级信息和所有学生信息
        public void ShowInfo()
        {
            Console.WriteLine($"班级编号：{Id}，班级名称：{Name}，所属学校：{School.Name}");
            Console.WriteLine("该班级包含以下学生：");
            foreach (var s in Students)
            {
                s.ShowInfo();
            }
        }
    }

    // 学生类
    public class Student
    {
        public int Id { get; set; } // 学生编号
        public string Name { get; set; } // 学生姓名
        public int Age { get; set; } // 学生年龄
        public string Gender { get; set; } // 学生性别
        public Class Class { get; set; } // 学生所属的班级

        // 构造函数，初始化学生信息
        public Student(int id, string name, int age, string gender)
        {
            Id = id;
            Name = name;
            Age = age;
            Gender = gender;
            Class = null;
        }

        // 显示学生信息
        public void ShowInfo()
        {
            Console.WriteLine($"学生编号：{Id}，学生姓名：{Name}，学生年龄：{Age}，学生性别：{Gender}，所属班级：{Class?.Name ?? "无"}");
        }
    }
}

